use std::vec;

fn main() {
    println!("迭代器函数: iter::any");

    let vec1 = vec![1, 2, 3];
    let vec2 = vec![4, 5, 6];

    let vec3 = vec2.clone();

    println!(
        "2 in vec1: {} (iter 每个元素为 &x)",
        vec1.iter().any(|&x| x == 2)
    );
    println!(
        "5 in vec2: {} (into_iter 每个元素为 x)",
        vec2.into_iter().any(|x| x == 5)
    );

    // 注意 `find` 方法会把迭代器元素的引用传给闭包。迭代器元素自身是 `&i32` 类型，所以传给闭包的是 `&&i32` 类型。
    println!("2 in vec1: {:?} (find)", vec1.iter().find(|&&x| x == 2));
    // value used here after move, vec2 在上面的 into_iter 转移了所有权
    // println!("5 in vec2: {:?} (find)", vec2.into_iter().find(|&x| x == 5));
    // 使用 vec2 的clone
    println!("5 in vec2: {:?} (find)", vec3.into_iter().find(|&x| x == 5));
}
